package br.com.petshow.dao;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.petshow.model.Donos;
import br.com.petshow.utils.SqlField;

public class DonosDao extends GenericDao<Donos> {

	public DonosDao() {
		setTableName("DONOS");
		setSequenceName("SQ_ID_DONOS");
	}
	
	@Override
	public void insertOrUpdate(Donos o) throws SQLException {
		setFields(o);
		super.insertOrUpdate(o);
	}

	@Override
	public void delete(Donos o) {
		super.delete(o);
	}
	
	private void setFields(Donos o) {
		List<SqlField> fields = new ArrayList<SqlField>();

		SqlField nome = new SqlField("nome",o.getNome());
		SqlField cpf = new SqlField("cpf",o.getCpf());
		SqlField telefone = new SqlField("telefone",o.getTelefone());
		fields.add(nome);
		fields.add(cpf);
		fields.add(telefone);
		
		setFieldsToInsertOrEdit(fields);
	}

	@Override
	public Donos tratarRetorno(ResultSet rs) throws SQLException {
		Donos dono = new Donos();
		rs.next();
		ResultSetMetaData rsmd = rs.getMetaData();
		
		for(int i = 1; i <= rsmd.getColumnCount(); i++) {
			switch (rsmd.getColumnName(i).toLowerCase()) {
			case "id":
				dono.setId(rs.getInt("id"));
				break;
			case "nome":
				dono.setNome(rs.getString("nome"));
				break;
			case "cpf":
				dono.setCpf(rs.getString("cpf"));
				break;
			case "telefone":
				dono.setTelefone(rs.getString("telefone"));
				break;
			default:
				break;
			}
		}
		
		return dono;
	}

	@Override
	public List<Donos> tratarRetornoList(ResultSet rs) throws SQLException {
		List<Donos> retorno = new ArrayList<Donos>();
		
		while(rs.next()) {
			Donos dono = new Donos();
			ResultSetMetaData rsmd = rs.getMetaData();
			
			for(int i = 1; i <= rsmd.getColumnCount(); i++) {
				switch (rsmd.getColumnName(i).toLowerCase()) {
				case "id":
					dono.setId(rs.getInt("id"));
					break;
				case "nome":
					dono.setNome(rs.getString("nome"));
					break;
				case "cpf":
					dono.setCpf(rs.getString("cpf"));
					break;
				case "telefone":
					dono.setTelefone(rs.getString("telefone"));
					break;
				default:
					break;
				}
			}
			retorno.add(dono);
		}

		return retorno;
	}

	
}
